// @before-stub-for-debug-begin
#include <vector>
#include <string>
#include "commoncppproblem64.h"

using namespace std;
// @before-stub-for-debug-end

/*
 * @lc app=leetcode.cn id=64 lang=cpp
 *
 * [64] 最小路径和
 */

// @lc code=start
class Solution {
public:
    // int minPathSum(vector<vector<int>>& grid) {
    //     int row = grid.size();
    //     int col = grid[0].size();

        
    //     for(int i = 0 ; i < row ; i++)
    //         for(int j = 0 ; j < col ; j++)
    //         {
    //             int up = 0;
    //             int left = 0;
    //             if(i == 0 && j == 0)
    //                 continue;
    //             if(j == 0)
    //             {
    //                 left = INT_MAX;
    //             }else
    //             {
    //                 left = grid[i][j-1];
    //             }
    //             if(i == 0)
    //             {
    //                 up = INT_MAX;
    //             }
    //             else
    //             {
    //                 up = grid[i-1][j];
    //             }
    //             grid[i][j] += min(up,left);
    //         }

    //     return grid[row-1][col-1];
    // }
    int minPathSum(vector<vector<int>>& grid) {
        int row = grid.size();
        int col = grid[0].size();

        
        for(int i = 0 ; i < row ; i++)
            for(int j = 0 ; j < col ; j++)
            {
                int up = 0;
                int left = 0;
                if(i == 0 && j == 0)
                    continue;
                
                int left = j>0?grid[i][j-1]:INT_MAX;
                if(i == 0)
                {
                    up = INT_MAX;
                }
                else
                {
                    up = grid[i-1][j];
                }
                
                grid[i][j] += min(up,left);
            }

        return grid[row-1][col-1];
    }
};
// @lc code=end

